import axios from "axios";
import { ElMessage } from "element-plus";

enum CodeEnum {
  success = 200, // 成功
  requestParamError = 400, // 请求参数错误
  unauthorized = 401, // 未授权，请登录
  accessDenied = 403, // 拒绝访问
  requestAddressError = 404, // 请求地址出错
  requestTimeout = 408, // 请求超时
  apiError = 500, // API接口报500错误
  serviceNotImplemented = 501, // 服务未实现
  gatewayError = 502, // 网关错误
  serviceUnavailable = 503, // 服务不可用
  gatewayTimeout = 504, // 网关超时
  httpVersionNotSupported = 505, // HTTP版本不受支持
}

// 创建axios的一个实例
const request = axios.create({
  // 配置公共请求地址
  baseURL: '/',
  // 配置请求时长 (当请求超过该时间,则自动中断请求)
  timeout: 20000,
  // // 配置请求头(只针对post 请求有效)
  headers: { 'Content-Type': 'application/json' }
});

// 添加一个请求拦截器
request.interceptors.request.use(
  (config: any) => {
    // 这里按需配置 | 登陆放token等
    // config.headers['Access-Control-Allow-Origin'] = '*'
    // 每次发送请求之前判断是否存在token，如果存在，则统一在http请求的header都加上token，不用每次请求都手动添加了
    let queryParams:any = localStorage.getItem('queryParams');
    queryParams = JSON.parse(queryParams);
    queryParams.Authorization && (config.headers['Authorization'] = `Basic ${queryParams.Authorization}`);
    queryParams.token && (config.headers['Authorization'] = `Bearer ${queryParams.token}`);
    queryParams.loginId && (config.headers['loginId'] = queryParams.loginId);
    queryParams['x-coral-tenant'] && (config.headers['x-coral-tenant'] = queryParams['x-coral-tenant']);
    // tenantId && (config.headers.tenantId = tenantId);
    queryParams.tenantId && (config.headers['X-Coral-Tenant'] = queryParams.tenantId);
    // deptId && (config.headers.deptId = deptId);
    return config;
  },
  (error) => {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 添加一个响应拦截器
request.interceptors.response.use(
  (res) => {
    if (res.status === 200) {
      if (res.config.responseType === "blob") {
        return res.data;
      } else {
        if (res.data.code === CodeEnum.success) {
          return res.data;
        } else if (res.data.code === CodeEnum.unauthorized) {
          // logOutLogin();
        } else if (res.data.code === CodeEnum.apiError || res.data.code === 2003 || res.data.code === 2002) {
          ElMessage.error(res.data.message);
          return res.data;
        } else {
          ElMessage.error("请求异常");
          return res.data;
        }
      }
    }
  },
  (error) => {
    // 响应错误
    return Promise.reject(error);
  }
);

export default request
